import {
  Controller,
  Get,
  Post,
  Put,
  Param,
  Body,
  Query,
  Delete,
  UseFilters,
} from '@nestjs/common';
import { AppService } from './app.service';
import { testService } from './test.service';
import { HttpExceptionFilter } from './exceptions/http-exception.filter';
@Controller()
export class AppController {
  constructor(
    private readonly testService: testService,
    private readonly appService: AppService
  ) {}
  // 这里谁先注册就先用谁的（localhost:3000）
  @Get()
  getTestData(): string {
    return this.testService.getTestData();
  }

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }

  // NestJS中创建的3中传参和拿参
  /*
  Param:restful参数
  Query:一般是get 查询参数
  Body:一般是post请求体参数
   */
  // 测试
  // @Get('test/:id')
  // @Get('/test/:subid') // 将id换成subid  会使得id找不到就会把报错（去看service层）
  /* {
  //     "statusCode": 400,
  //     "message": "id不能为空"
   } */
  @Get('/test/:id')
  @UseFilters(HttpExceptionFilter)
  getTest(@Param() params: { id: string }): string {
    return this.testService.getTest(params.id);
  }
  // post这里即支持body传参  也支持query传参
  @Post('/test')
  postTest(
    @Body() bodys: { id: string; name: string },
    // 这是只是query 作为测试的时候使用
    @Query() querys: { age: number }
  ): string {
    return this.testService.postTest(bodys, querys);
  }

  @Put('/test')
  putTest(@Body() bodys: { id: string; name: string }): string {
    return JSON.stringify(bodys);
  }
  @Delete('/test/:id')
  deleteTest(@Param('id') id: string): string {
    return this.testService.deleteTest(id);
  }

  // 在体验了services层之后 虽然controller可以写处理
  // 但是我们可以将业务逻辑放到services层中
}
